import java.util.ArrayList;
import java.util.Objects;

/**
 * 判断链表是否是回文结构。
 * 首先找到链表的中间位置，然后翻转中间位置到最后的位置的数据。
 * 统计链表的长度 除以2.
 * 然后对比两个链表的值是否相同。
 */
public class JavaDemo11 {
    public static void main(String[] args) {
        int[] arrays = {1, 2,  2, 1, 0};
        ListNode head = new ListNode(0);
        ListNode next = head;
        for (int i = 0; i < arrays.length; i++) {
            ListNode node = new ListNode(arrays[i]);
            next.next = node;
            next = node;
        }
        ListNode showParent = head;
        while (showParent != null) {
            System.out.println(showParent.val);
            showParent = showParent.next;
        }
        System.out.println("--------------" + palindromic(head));

    }

    private static boolean palindromic(ListNode head) {
        // 找到链表的中间节点。
        ListNode p=head;
        int n=0;
        while (p!=null){
            n++;
            p=p.next;
        }
        n=n/2;
        p=head;
        while (n>0){
            p=p.next;
            n--;
        }
        // 这个时候的P就是中间节点。
        p=reverse(p);
        ListNode q=head;
        while (p!=null){
            System.out.println("p="+p.val+"  q="+q.val);
            if (p.val!=q.val){
                return false;
            }else {
                p=p.next;
                q=q.next;
            }
        }
        return true;
    }

    private static ListNode reverse(ListNode head) {
        System.out.println("------:"+head.val);
        ListNode prev=null;
        while (head!=null){
            ListNode next=head.next;
            head.next=prev;
            prev=head;
            head=next;
        }
        return prev;
    }


}
